#define _CRT_SECURE_NO_WARNINGS 1
#include<thread>
#include<vector>
#include "smartPtr.h"
using namespace SmartPtr;

//#define NUM 10000
//void func1(SharePtr<int>& sp)
//{
//	vector<SharePtr<int>> vsp;
//
//	for (int i = 0; i < NUM; i++)
//	{
//		vsp.push_back(sp);
//	}
//}
//
//void func2(SharePtr<int>& sp)
//{
//	vector<SharePtr<int>> vsp;
//
//	for (int i = 0; i < NUM; i++)
//	{
//		vsp.push_back(sp);
//	}
//}
//int main()
//{
//	SharePtr<int> sp(new int);
//
//	thread t1(func1, ref(sp));
//	thread t2(func2, ref(sp));
//
//	cout << "RefCount: " << sp.GetRefCount() << endl;
//
//	t1.join();
//	t2.join();
//	return 0;
//}

struct ListNode
{
	Weakptr<ListNode> _next;
	Weakptr<ListNode> _prev;
	int _data;

	ListNode()
		:_data(0)
	{}
	~ListNode()
	{
		cout << "~ListNode()" << endl;
	}
};

int main()
{
	SharePtr<ListNode> n1(new ListNode);
	SharePtr<ListNode> n2(new ListNode);
	n1->_next = n2;
	n2->_prev = n1;

	return 0;
}